#pragma once
#ifndef SMPPSUBMITMULTI_HPP
#define SMPPSUBMITMULTI_HPP

#include "SMPPStructures.hpp"
#include "SMPPHeader.hpp"
#include "SMPPMessageSubmissionRequestTLVs.hpp"
#include <QVector>

namespace smpp {
namespace pdu{

class SMPP_DLLPRFX SubmitMulti : public Header,
public MessageSubmissionRequestTLVs{
	CoctetString _ServiceType;
	quint8 _SourceAddrTON;
	quint8 _SourceAddrNPI;
	CoctetString _SourceAddr;
	quint8 _NumberOfDest;
	QVector<DestAddress> _DestAddress;
	quint8 _EsmClass;
	quint8 _ProtocolId;
	quint8 _PriorityFlag;
	CoctetString _ScheduleDeliveryTime;
	CoctetString _ValidityPeriod;
	quint8 _RegisteredDelivery;
	quint8 _ReplaceIfPresentFlag;
	quint8 _DataCoding;
	quint8 _SMDefaultMsgId;
	quint8 _SMLength;
	octetString _ShortMessage;
public:
	SubmitMulti(const Header &nHeader = Header(),
		const CoctetString &nServiceType = "",
		const quint8 nSourceAddrTON = 0,
		const quint8 nSourceAddrNPI = 0,
		const CoctetString &nSourceAddr = "",
		const quint8 nNumberOfDest = 0,
		const QVector<DestAddress> nDestAddress = QVector<DestAddress>(),
		const quint8 nEsmClass = 0,
		const quint8 nProtocolId = 0,
		const quint8 nPriorityFlag = 0,
		const CoctetString &nScheduleDeliveryTime = "",
		const CoctetString &nValidityPeriod = "",
		const quint8 nRegisteredDelivery = 0,
		const quint8 nReplaceIfPresentFlag = 0,
		const quint8 nDataCoding = 0,
		const quint8 nSMDefaultMsgId = 0,
		const quint8 nSMLength = 0,
		const octetString &nShortMessage = octetString(),
		const MessageSubmissionRequestTLVs &
		nMessageSubmissionRequestTLVs = MessageSubmissionRequestTLVs());

	SubmitMulti(const SubmitMulti &);

	void setServiceType(const CoctetString &);

	const CoctetString &getServiceType() const;

	void setSourceAddrTON(const quint8);

	const quint8 getSourceAddrTON() const;

	void setSourceAddrNPI(const quint8);

	const quint8 getSourceAddrNPI() const;

	void setSourceAddr(const CoctetString &);

	const CoctetString &getSourceAddr() const;

	void setNumberOfDest(const quint8);

	const quint8 getNumberOfDest() const;

	void addDestAddress(const DestAddress &);

	void setDestAddress(const QVector<DestAddress> &);

	const QVector<DestAddress> &getDestAddress() const;

	void setEsmClass(const quint8);

	const quint8 getEsmClass() const;

	void setProtocolId(const quint8);

	const quint8 getProtocolId() const;

	void setPriorityFlag(const quint8);

	const quint8 getPriorityFlag() const;

	void setScheduleDeliveryTime(const CoctetString &);

	const CoctetString &getScheduleDeliveryTime() const;

	void setValidityPeriod(const CoctetString &);

	const CoctetString &getValidityPeriod() const;

	void setRegisteredDelivery(const quint8);

	const quint8 getRegisteredDelivery() const;

	void setReplaceIfPresentFlag(const quint8);

	const quint8 getReplaceIfPresentFlag() const;

	void setDataCoding(const quint8);

	const quint8 getDataCoding() const;

	void setSMDefaultMsgId(const quint8);

	const quint8 getSMDefaultMsgId() const;

	void setSMLength(const quint8);

	const quint8 getSMLength() const;

	void setShortMessage(const octetString &);

	const octetString &getShortMessage() const;

	void calcCommandLength();
};

}
}

#endif
